iT邦幫忙

2024 iThome 鐵人賽

DAY 25
1
Python

時空序列分析-關鍵籌碼分析系列 第 25

時空序列ConvLSTM模型-預測結果解讀與視覺化(2/2)

  • 分享至 

  • xImage
  •  

今天來把最後分析完成,

單純只看文字和地址,還是很難聯想,那我們就把這些地址都視覺化吧!

同樣用到 DAY14提到的matplotlibfolium兩種工具:

import joblib

model = joblib.load("trainModel_0823_ver3.joblib") 
predictions = model.predict(combined_data_test)

如果工作時間重設了,或是電腦重開了,就需要上面這步驟,讀取儲存的模型
(這就是為什麼要把辛苦訓練的模型存起來..不然每次都要等訓練多累)
(訓練模型前的變數,其實都需要再跑一次,尤其是那個 combined_data_test )


1.讀取 lat_lng_New.xlsx,並篩選出預測買超前10、賣超前10名的這些券商的經緯度。

import pandas as pd
import numpy as np
import folium
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

讀下面這個檔案,是為了抓這些券商的地址經緯度

lat_lng_df = pd.read_excel('E:/時空資料分析/關鍵分點籌碼分析_實測/lat_lng_New.xlsx')

接續把昨天的模型預測結果拿來畫圖:

# 讀取預測結果
results = pd.DataFrame({
    '索引': idx_test,
    '券商代碼': df.index[idx_test],
    '預測值': predictions.flatten(),
    '實際值': y_test
})

# 列出排序過後,預測買超前10名,和賣超前10的券商分點
top_10_max = results.nlargest(10, '預測值')
top_10_min = results.nsmallest(10, '預測值')

# 在lat_lng_New.xlsx找出這前20名券商分點
top_10_brokers = pd.concat([top_10_max, top_10_min])
selected_brokers = lat_lng_df[lat_lng_df['券商代碼'].isin(top_10_brokers['券商代碼'])]

2.在Folium 互動式地圖中特別標記出這買、賣超前10名的券商分點,還有標記其他券商

# 地圖初始化,設定初始位置和縮放等級
taiwan_map = folium.Map(location=[23.5, 121], zoom_start=7)

# 把普通券商分點的位置標記到到地圖上
for index, row in lat_lng_df.iterrows():
    folium.Marker(
        location=[row['lat'], row['lng']],
        popup=f"券商代碼: {row['券商代碼']}",
        icon=folium.Icon(color='blue', icon='info-sign')
    ).add_to(taiwan_map)

# 用兩種不同顏色格外標記,把這買、賣超前10名的券商分點也標記到地圖上
# 買超為red,賣超為green
for index, row in selected_brokers.iterrows():
    color = 'red' if row['券商代碼'] in top_10_max['券商代碼'].values else 'green'
    folium.Marker(
        location=[row['lat'], row['lng']],
        popup=f"券商代碼: {row['券商代碼']}",
        icon=folium.Icon(color=color, icon='info-sign')
    ).add_to(taiwan_map)

# 存成html互動式網頁
taiwan_map.save('taiwan_brokers_MinMax10map.html')

點開存好的網頁,打開就會看到這樣有格外標記的地圖(如下圖)
https://ithelp.ithome.com.tw/upload/images/20240825/2016832263b8uzQKOo.png


3.在 Matplotlib 圖中特別標記出這買、賣超前10名的券商分點,還有標記其他券商

# 建立靜態圖像
plt.figure(figsize=(10, 10))

# 設置字體
zhfont = fm.FontProperties(fname=r'C:\Windows\Fonts\kaiu.ttf')
plt.rcParams['font.family'] = zhfont.get_name()

# 所有券商分點位置的散佈圖
plt.scatter(lat_lng_df['lng'], lat_lng_df['lat'], c='blue', marker='o', label='其他券商位置')

# 買、賣超前10名的券商分點位置,一樣紅、綠色分別標記
plt.scatter(selected_brokers['lng'], selected_brokers['lat'],
            c=np.where(selected_brokers['券商代碼'].isin(top_10_max['券商代碼']), 'red', 'green'),
            marker='o', label='前10大和前10小券商位置')

# 把這買、賣超前10名分點的券商代碼標註出來台
for i, txt in enumerate(selected_brokers['券商代碼']):
    plt.annotate(txt, (selected_brokers['lng'].iloc[i], selected_brokers['lat'].iloc[i]), textcoords="offset points", xytext=(0, 10), ha='center')

# 標題和軸的名稱
plt.title('券商位置分布', fontproperties=zhfont)
plt.xlabel('經度 (lng)', fontproperties=zhfont)
plt.ylabel('緯度 (lat)', fontproperties=zhfont)

# 顯示圖例(在左下角)
plt.legend(loc='lower left', frameon=True)
plt.show()

# 儲存圖像
plt.savefig('broker_locations.png')

https://ithelp.ithome.com.tw/upload/images/20240825/20168322d3CcfEcwq9.png

有了地圖,就可以從地圖上看看他們是不是地緣券商了!

還記得昨天提到所羅門公司的地址在台中市西屯區,把地圖放大一點觀察(如下圖)

https://ithelp.ithome.com.tw/upload/images/20240825/201683222LpGhKJOQn.png

看來模型有預測出來公司周邊是有一些券商似乎特別活躍,在進行買入和賣出的操作,
但其他的分點沒被預測出來。

--

接著看看預測的券商分點集中的地方,
像是 高雄(如下圖)
https://ithelp.ithome.com.tw/upload/images/20240825/20168322Opzg5NqG5Z.png

還有 台北市信義區(如下圖)
https://ithelp.ithome.com.tw/upload/images/20240825/20168322ANnvftwNXX.png


基本上再用前面提到的程式碼,依照自己的需求和想法,去追蹤這些券商他們這段時間的買賣超狀況,
就可以當作自己的投資建議,但這個模型現在這樣應該超不準確@@

明天來說明隔日沖還有對這個題目做一個結尾吧!


每日記錄:
下午把課上完了(癱,逼著拖延症不輕的自己把文章寫完!

甚麼是黑天鵝? 戰爭就是黑天鵝,原本看起來經濟一片榮景,但突然來個戰爭,又開始有點怕了。
但是,戰爭影響股市還有關乎"可以反應的時間"和"預期",
像是禮拜日戰爭、禮拜一開盤vs.禮拜一戰爭、禮拜二開盤,兩種時間的股市的走勢劇情是不一樣的。

猜猜禮拜一的劇情,開高走低(?,很多人和外資應該會高檔出貨。
但是很多人在賭NVIDIA的財報,且看且走。


上一篇
時空序列ConvLSTM模型-關鍵籌碼預測結果之分析與解讀(1/2)
下一篇
時空序列分析-關鍵籌碼分析的結論心得與未來方向
系列文
時空序列分析-關鍵籌碼分析31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言